from typing import List


'''
给你一个整数数组 nums 。每一次操作中，你可以将 nums 中 任意 一个元素替换成 任意 整数。
如果 nums 满足以下条件，那么它是 连续的 ：
· ums 中所有元素都是 互不相同 的。
· nums 中 最大 元素与 最小 元素的差等于 nums.length - 1 。
比方说，nums = [4, 2, 5, 3] 是 连续的 ，但是 nums = [1, 2, 3, 5, 6] 不是连续的 。
请你返回使 nums 连续 的 最少 操作次数。

示例 1：
输入：nums = [4,2,5,3]
输出：0
解释：nums 已经是连续的了。

示例 2：
输入：nums = [1,2,3,5,6]
输出：1
解释：一个可能的解是将最后一个元素变为 4 。
结果数组为 [1,2,3,5,4] ，是连续数组。

示例 3：
输入：nums = [1,10,100,1000]
输出：3

解释：一个可能的解是：
- 将第二个元素变为 2 。
- 将第三个元素变为 3 。
- 将第四个元素变为 4 。
结果数组为 [1,2,3,4] ，是连续数组。
'''


class Solution:
    # @staticmethod
    def min_operations(self, nums: List[int]) -> int :
        nums.sort()
        # 存储当前遍历到的值
        a = nums[0]
        # 连续列表的长度
        continue_value = 1
        # 最大连续列表的长度
        max_continue_value = 1
        # 连续列表
        continue_list = []
        # 最大的连续列表
        max_continue_list = []

        continue_list.append(nums[0])
        for index in range(1, len(nums)):
            if nums[index] == a + 1:
                print("进入if")
                continue_value += 1
                a = nums[index]
                continue_list.append(nums[index])

            else:
                a = nums[index]
                continue_list.clear()
                continue_list.append(a)
                continue_value = 1

            # 如果连续的数量比最大的连续数量大，则将连续的数量赋值
            if continue_value > max_continue_value:
                max_continue_value = continue_value
            if len(continue_list) > len(max_continue_list):
                max_continue_list.clear()
                for value in continue_list:
                    max_continue_list.append(value)

        if len(nums) != len(max_continue_list):
            max_value = nums[len(nums)-1]
            min_value = nums[0]

            diff_len = len(nums) - len(max_continue_list)
            diff_min_value = min_value - max_continue_list[0]
            diff_max_value = max_value - max_continue_list[len(max_continue_list) - 1]
            if diff_min_value == diff_len or diff_max_value == diff_len:
                return len(nums) - max_continue_value -1
            else:
                 return len(nums) - max_continue_value
        else:
            return 0






# 创建 Solution 的实例
solution = Solution()
min_value1 = solution.min_operations([1,2,3,5,6])
print("最小的value为：",min_value1)

